package com.qf.springmvc02.controller;

import com.github.pagehelper.PageInfo;
import com.qf.springmvc02.entity.User;
import com.qf.springmvc02.response.Response;
import com.qf.springmvc02.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.SessionAttributes;

import javax.servlet.http.HttpServletRequest;
import java.util.Objects;

/**
 * @AUTHOR ZED
 * @DATE 2022/5/4 14:47
 * 登录控制器
 */
@Controller
@SessionAttributes({"user"})
public class LoginController {

    @Autowired
    UserService userService;

    // @PostMapping 这个注解的意思是只能接收post请求
    @PostMapping("/login")
    public String login(User user, Model model, String code, HttpServletRequest request) {
        // 先获取session中存的验证码 跟用户传入的验证码进行比较 如果不一致 直接返回验证码
        String captcha = (String) request.getSession().getAttribute("captcha");
        if (Objects.equals(captcha, code)) {
            // 调用业务层进行登录
            User login = userService.login(user.getName(), user.getPassword());
            // 如果返回的用户不是null 说明登录成功
            if (Objects.nonNull(login)) {
                // 登录成功
                model.addAttribute("user", user);
                // 查询所有用户，返回到页面进行显示
                PageInfo<User> users = userService.selectAllUser(1, 10);
                model.addAttribute("pageInfo", users);
                return "welcome";
            } else {
                model.addAttribute("error", "用户名或密码错误");
            }
        } else {
            // 验证码输入错误
            model.addAttribute("error", "验证码错误");
        }
        return "index";
    }

    @PostMapping("/loginJson")
    @ResponseBody
    public Response<User> loginJson(User user, Model model, String code, HttpServletRequest request) {
        // 先获取session中存的验证码 跟用户传入的验证码进行比较 如果不一致 直接返回验证码
        String captcha = (String) request.getSession().getAttribute("captcha");
        if (Objects.equals(captcha, code)) {
            // 调用业务层进行登录
            User login = userService.login(user.getName(), user.getPassword());
            // 如果返回的用户不是null 说明登录成功
            if (Objects.nonNull(login)) {
                // 前端想获取登录人的信息
                return Response.success(login);
            } else {
                return Response.fail(-1, "用户名或密码错误", null);
            }
        } else {
            // 验证码输入错误
            return Response.fail(-1, "验证码错误", null);
        }
    }
}
